package com.example.dto;

import com.example.error.ErrorCode;
import lombok.Data;

/**
 * 通用响应类，所有业务响应的基础类。
 */
@Data
public class Response<T> {

    /**
     * 响应状态码。
     */
    private int code;

    /**
     * 响应消息。
     */
    private String message;

    /**
     * 具体的业务数据，由具体的 DTO 类定义。
     */
    private T data;

    /**
     * 构造成功响应的静态方法
     */
    public static <T> Response<T> success(T data) {
        Response<T> response = new Response<>();
        response.setCode(200);
        response.setMessage("success");
        response.setData(data);
        return response;
    }

    /**
     * 构造失败响应的静态方法，使用状态码和消息
     */
    public static <T> Response<T> failure(int statusCode, String message) {
        Response<T> response = new Response<>();
        response.setCode(statusCode);
        response.setMessage(message);
        return response;
    }

    /**
     * 构造失败响应的静态方法，使用错误码枚举
     */
    public static <T> Response<T> failure(ErrorCode errorCode) {
        Response<T> response = new Response<>();
        response.setCode(errorCode.getCode());
        response.setMessage(errorCode.getMessage());
        return response;
    }
}
